package com.fjnu.dao;

import com.fjnu.dto.UserConditionDto;
import com.fjnu.entity.User;

import java.util.List;

/**
 * 用户模块DAO接口
 */
public interface UserDao {
    
    /**
     * 新增用户
     * @param newUser 新用户对象
     * @return 新增成功返回1，否则返回0
     */
    int insert(User newUser);

    /**
     * 将roleId分配给userId
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return 分配成功返回1，否则返回0
     */
    int insertUserRole(Integer userId, Integer roleId);

    /**
     * 批量将roleIds分配给userId
     * @param userId 用户ID
     * @param roleIds 角色ID列表
     * @return 插入成功的记录数
     */
    int batchInsertUserRoles(Integer userId, List<Integer> roleIds);

    /**
     * 修改密码
     * @param userId 用户ID
     * @param newPassword 新密码
     * @return 修改成功返回1，否则返回0
     */
    int updatePassword(Integer userId, String newPassword);

    /**
     * 通过增量来修改分数
     * @param userId 用户ID
     * @param incrementedScore 增量分数
     * @return 修改成功返回1，否则返回0
     */
    int updateScore(Integer userId, Long incrementedScore);

    /**
     * 通过用户名和密码来查询用户
     * @param username 用户名
     * @param password 密码
     * @return 满足条件的User对象，否则返回null
     */
    User selectByNameAndPwd(String username, String password);

    /**
     * 根据筛选条件查询用户
     * @param userCondition 用户查询条件
     * @return 用户列表
     */
    List<User> selectByCondition(UserConditionDto userCondition);

    /**
     * 根据筛选条件查询指定范围的用户
     * @param userCondition 用户查询条件
     * @param startIndex 起始索引
     * @param endIndex 结束索引
     * @return 用户列表
     */
    List<User> selectByConditionWithLimit(UserConditionDto userCondition, Integer startIndex, Integer endIndex);
}